(CNVD-2019-17294)齐治堡垒机 后台命令执行漏洞
一、漏洞简介
二、漏洞影响
三、复现过程
漏洞分析
首先,定位到/audit/data_provider.php,直接查找$_GET['service']或者$_REQUEST['service']都找不到。原来在文件开头包含的common.php中,已有全局配置。
代码如下,不但给变量加了个前缀"req_",还过滤掉了一些危险字符。
齐治堡垒机后台命令执行漏洞/media/rId25.jpg)
然后,搜索"
$req_service"定位到data_provider.php文件的第99行。可见,将$GET['service']赋值到$service变量中。
齐治堡垒机后台命令执行漏洞/media/rId26.jpg)
然后,跟进$service来到data_provider.php文件的第124行。可见,通过字符串拼接,将$_GET['service']带入到$cmd变量中。
齐治堡垒机后台命令执行漏洞/media/rId27.jpg)
然后,跟进$cmd来到data_provider.php文件的第133行。可见,$cmd被带入exec函数中执行。至此,造成远程命令执行漏洞。
齐治堡垒机后台命令执行漏洞/media/rId28.jpg)
漏洞复现
如下图,通过在传递参数"service=id
",成功执行命令,并回显命令执行结果。
齐治堡垒机后台命令执行漏洞/media/rId30.png)
通过反单引号执行命令,写入PHP一句话代码到服务器。
原理如下图所示,这样就可以绕过过滤执行任意命令。实际上,还需要用${IFS}替换掉空格才行。
齐治堡垒机后台命令执行漏洞/media/rId31.jpg)
所以,最终方案如下。
齐治堡垒机后台命令执行漏洞/media/rId32.jpg)